package cn.it.shop.action;

import java.util.HashSet;
import java.util.Set;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.it.shop.pojo.Account;
import cn.it.shop.pojo.Privilege;
import cn.it.shop.pojo.Role;

@Controller
@Scope("prototype")
public class AccountAction extends BaseAction<Account> {
	
	private int[] ids;
	
	public int[] getIds() {
		return ids;
	}

	public void setIds(int[] ids) {
		this.ids = ids;
	}
	
//    // 实现管理员登陆效果,并且查询出管理员角色信息
//	public String login(){
//		// 实现登陆功能判断
//		model=accountService.login(model);
//		if(model!=null){
//			// 把登陆的account信息存储session中
//			session.put("account", model);
//			// 如果登陆成功,需要获取当前管理员角色和权限的集合, 而且要避免权限地址的重复
//			Set<String> priSet=new HashSet<String>();
//			// 获取当前管理员的角色信息
//			for(Role role:model.getRoleSet()){
//				for(Privilege privilege:role.getPrivilegeSet()){
//					priSet.add(privilege.getUrl());
//				}
//			}
//			// 存储了当前用户可以访问URL地址
//			session.put("myURL",priSet.toArray(new String[priSet.size()]));
//			return "aindex";
//		}else{
//			session.put("error","登陆失败!");
//			return "alogin";
//		}
//	}

	// 新增角色
	public String save(){
		accountService.save(model);
		return "query";
	}
	
	// 查询所有角色
	public String query(){
		request.put("accountList", accountService.query());
		return "query";
	}
	
	// 更新某个角色信息
	public String getById(){		
		request.put("account",accountService.get(model.getId()));
		return "update";
	}
	
	// 更新管理员的的角色信息
	public String getFetchRid(){
		// 1: 更新id查询当前的管理员(还包括管理员的角色信息),后面要实现信息回显
		Account account = accountService.getFetchRid(model.getId());
		// 2: 获取管理员中的角色集合中的URL字符串，并且存储到字符串数组中
		String[] myId=roleService.getRoleId(account.getRoleSet());
		// 把当前管理员存储到request内置对象中
		request.put("account",account);
		request.put("myId",myId);
		// 3: 获取所有的角色集合角色本身是可以维护,所以不建议放到application中
		request.put("roleList",roleService.query());
		return "updateRid";
	}
	
	// 级联更新管理员的角色ID
	public String updateRid(){
		// 查询当前角色信息
		Set<Role> roleSet=new HashSet<Role>();
		//1: 角色信息已经交给model
		model=accountService.get(model.getId());
		//2: 获取管理员新的角色信息,然后做级联更新
		for(int id:ids){
			System.out.println(id);
			roleSet.add(new Role(id));
		}
		// 添加相应角色集合
		model.setRoleSet(roleSet);
		// 级联更新外键信息
		accountService.update(model);
		return "query";
	}
	
	// 只更新管理员信息
	public String update(){
		// 不会级联更新外键
		accountService.updateOnlyAccount(model);
		return "query";
	}
	
	// 删除指定角色信息
	public String delete(){
		System.out.println("---删除指定角色信息---");
		accountService.delete(model.getId());
		request.put("accountList", accountService.query());
		return "query";
	}
}
